/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.eam.clinica.logica.bo;

import co.edu.eam.persitencia.dao.Interfaz.IDAOHistoriaClinica;
import co.edu.eam.persitencia.dao.implementacion.DAOHistoriaClinica;
import co.edu.eam.persitencia.entidades.Antecedente;
import co.edu.eam.persitencia.entidades.DetalleComentarioSistema;
import co.edu.eam.persitencia.entidades.DetalleHistoriaClinica;
import co.edu.eam.persitencia.entidades.ExamenFisico;
import co.edu.eam.persitencia.entidades.HistoriaClinica;
import co.edu.eam.persitencia.utilidades.FactoryEntityManager;
import java.util.List;
import javax.persistence.EntityManager;
import javax.swing.JOptionPane;

/**
 *
 * @author jua
 */
public class BOHistoriaClinica {

    static EntityManager fabrica = FactoryEntityManager.getEm();
    IDAOHistoriaClinica DaoHistoria;

    public BOHistoriaClinica() {
        DaoHistoria = new DAOHistoriaClinica(fabrica);
    }

    /**
     * crea la historia clinica nueva     *
     * @param historiaClinica, es la historia clinica a guardar
     * @throws Exception
     */
    public void crearHistoriaClinica(HistoriaClinica historiaClinica) throws Exception {
        if (buscarHistoriaClinica(historiaClinica.getPaciente().getDocumento()) == null) {
            DaoHistoria.crearHistoriaClinica(historiaClinica);
        } else {
            throw new Exception("La Historia Ya Existe");
        }
    }

    /**
     * busca una historia clinica     *
     * @param cedula, cedula del paciente de la historia clinica a buscar
     * @return la historia clinica encontrada
     * @throws Exception
     */
    public HistoriaClinica buscarHistoriaClinica(String cedula) throws Exception {
        return DaoHistoria.buscarHistoriaClinica(cedula);
    }

    /**
     * crea antecedente de la historia clinica     *
     * @param antecedente, atributo para agregarle a la historia clinica
     * @throws Exception
     */
    public void crearAntecedente(Antecedente antecedente) throws Exception {
        if (buscarAntecedente(antecedente.getHistoria().getPaciente().getDocumento()) == null) {
            DaoHistoria.crearAntecedente(antecedente);
        } else {
            throw new Exception("El Antecedente Ya Existe");
        }
    }

    /**
     * busca antecedente de la historia clinica     *
     * @param cedula, parametro para buscar el antecedente de una historia
     * @return antecedente encontrado
     * @throws Exception
     */
    public Antecedente buscarAntecedente(String cedula) throws Exception {
        return DaoHistoria.buscarAntecedente(cedula);
    }

    /**
     * crea el detalle de la historia clinica
     *
     * @param detalleHistoria, parametro para agregarle a la historia clinica
     * @throws Exception
     */
    public void crearDetalleHistoria(DetalleHistoriaClinica detalleHistoria) throws Exception {
        if (buscarHistoriaClinica(detalleHistoria.getHistoria().getPaciente().getDocumento()) == null) {
            DaoHistoria.crearDetalleHistoriaClinica(detalleHistoria);
        } else {
            throw new Exception("El Detalle Ya existe");
        }
    }

    /**
     * crea examen fisico de una historia clinica
     *
     * @param examenFisico, parametro para agregarle a la historia clinica
     * @throws Exception
     */
    public void crearExamenFisico(ExamenFisico examenFisico) throws Exception {
        if (buscarExamenFisico(examenFisico.getHistoriaClinica().getPaciente().getDocumento()) == null) {
            DaoHistoria.crearExamenFisico(examenFisico);
        } else {
            throw new Exception("El Examen Ya Existe");
        }
    }

    /**
     * busca el examen fisico de una historia clinica
     *
     * @param cedula, parametro para buscar la historia clinica de un paciente
     * @return examen fisico
     * @throws Exception
     */
    public ExamenFisico buscarExamenFisico(String cedula) throws Exception {
        return DaoHistoria.buscarExamenFisico(cedula);
    }

    /**
     * lista todas las historias clinicas
     *
     * @return una lista con todas las historias clinicas
     * @throws Exception
     */
    public List<HistoriaClinica> listarHistoriasClinicas() throws Exception {
        return DaoHistoria.listarHistoriaClinica();
    }
    
    public List<DetalleComentarioSistema> listarDetalleSistema(HistoriaClinica c) throws Exception {
        return DaoHistoria.listarComentarioSistema(c);
    }
}
